home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 2
/
Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso
/
Aminet
/
misc
/
amag
/
sh9301c.lha
/
Oberon(S.67)
/
Listing15.mod
< prev
next >
Wrap
Text File
|
1993-01-22
|
2KB
|
74 lines
MODULE MiniPaint;
IMPORT
I: Intuition, rq: Requests, s: SYSTEM, d: Dos, e: Exec, g: Graphics;
CONST
Version = "$VER: MiniPaint 1.00 (10-Jul-91)\n\r";
(* Für den Version-Befehl von OS 2.0 ! Example: "Version MiniPaint" *)
VAR
nw: I.NewWindow;
Win: I.WindowPtr;
IMsg: I.IntuiMessagePtr;
Draw, Quit: BOOLEAN;
Class: LONGSET;
Code: INTEGER;
OldX, OldY, X, Y, Color: INTEGER;
PROCEDURE Cut (VAR i: INTEGER; Min, Max: INTEGER);
BEGIN
IF i < Min THEN i := Min END;
IF i > Max THEN i := Max END;
END Cut;
BEGIN
Draw := FALSE; Quit := FALSE; Color := 1;
nw := I.NewWindow (100, 75, 300, 100, 0, 1, LONGSET {I.mouseButtons,
I.mouseMove, I.closeWindow}, LONGSET {I.rmbTrap,
I.reportMouse, I.windowDrag, I.sizeBRight, I.activate,
I.windowSizing, I.windowDepth, I.windowClose},
NIL, NIL, s.ADR ("MiniPaint v1.00"), NIL,
NIL, 150, 50, -1, -1, SET {I.wbenchScreen});
Win := I.OpenWindow (nw);
rq.Assert (Win # NIL, "Sorry, no Window");
g.SetDrMd (Win^.rPort, g.jam1);
g.SetAPen (Win^.rPort, Color);
REPEAT
e.WaitPort (Win^.userPort);
LOOP
IMsg := e.GetMsg (Win^.userPort);
IF IMsg = NIL THEN EXIT END;
Class := IMsg^.class;
Code := IMsg^.code;
X := IMsg^.mouseX;
Cut (X, Win^.borderLeft+1, Win^.width-Win^.borderRight-2);
Y := IMsg^.mouseY;
Cut (Y, Win^.borderTop+1, Win^.height-Win^.borderBottom-2);
e.ReplyMsg (IMsg);
IF (I.mouseButtons IN Class) THEN
CASE Code OF
| I.selectUp:
Draw := FALSE;
| I.selectDown:
Draw := TRUE;
OldX := X; OldY := Y;
IF g.WritePixel (Win^.rPort, X, Y) THEN END;
g.Move (Win^.rPort, X, Y);
| I.menuUp:
INC (Color);
IF Color > ASH (1, Win^.wScreen^.bitMap.depth)-1 THEN
Color := 0;
END; (* IF *)
g.SetAPen (Win^.rPort, Color); (* Farbe einstellen *)
ELSE
END; (* CASE *)
ELSIF (I.mouseMove IN Class) THEN
IF ((OldX # X) OR (OldY # Y)) AND Draw THEN
OldX := X; OldY := Y; (* Um nicht 1 Pixel lange Linien zu zeichnen *)
g.Draw (Win^.rPort, X, Y);
END; (* IF *)
ELSIF (I.closeWindow IN Class) THEN
Quit := TRUE; (* und tschüß! *)
END; (* IF *)
END; (* LOOP *)
UNTIL Quit;
CLOSE
IF Win # NIL THEN I.CloseWindow (Win); Win := NIL END;
END MiniPaint.